package com.kingtao.session;

import io.netty.channel.Channel;

import java.util.List;
import java.util.Set;

/**
 * @Author: kingtao
 * @Date: 2023-08-25-14:20
 * @Description: 小组管理
 */
public interface GroupSession {
    /**
     * 创建一个小组
     * @param master 组长
     * @param members 组员
     * @return  成功时返回组对象, 失败返回 null
     */
    Group createGroup(int master, Set<Integer> members);

    /**
     * 加入小组
     * @param master 组长
     * @param member 组员
     * @return 如果组不存在返回 null, 否则返回组对象
     */
    Group joinMember(int master, int member);

    /**
     * 移除组成员
     * @param master 组长
     * @param member 成员名
     * @return 如果组不存在返回 null, 否则返回组对象
     */
    Group removeMember(int master, int member);

    /**
     * 移除聊天组
     * @param master 组名
     * @return 如果组不存在返回 null, 否则返回组对象
     */
    Group removeGroup(int master);

    /**
     * 获取组成员
     * @param master 组名
     * @return 成员集合, 没有成员会返回 empty set
     */
    Set<Integer> getMembers(int master);

    /**
     * 获取组成员的 channel 集合, 只有在线的 channel 才会返回
     * @param master 组名
     * @return 成员 channel 集合
     */
    List<Channel> getMembersChannel(int master);
}
